/**
 * @param {Egg.Application} app - egg application
 */
module.exports = app => {
  const { router, controller } = app;
  const jwt = app.middleware.jwt();

  // 首页
  router.get('/', controller.home.index);

  // 用户管理
  // 用户注册
  router.post('/api/register', controller.user.register);
  // 用户登录
  router.post('/api/login', controller.user.login);
  // 用户退出登录
  router.post('/api/logout', jwt, controller.user.logout);
  // 修改密码
  router.post('/api/changePassword', jwt, controller.user.changePassword);
  // 获取用户列表
  router.get('/api/users/list', jwt, controller.user.list);
  // 获取用户信息
  router.get('/api/users/userInfo/:id', jwt, controller.user.show);
  // 创建用户
  router.post('/api/users/add', jwt, controller.user.create);
  // 修改用户信息
  router.post('/api/users/update/:id', jwt, controller.user.update);
  // 删除用户
  router.post('/api/users/delete/:id', jwt, controller.user.destroy);
  // 批量删除用户
  router.post('/api/users/batch', jwt, controller.user.batchDestroy);
  // 重置用户密码
  router.post('/api/users/resetPassword/:id', jwt, controller.user.resetPassword);
  // 修改用户状态
  router.post('/api/users/status/:id', jwt, controller.user.updateStatus);
  // RESTful路由放在最后，避免冲突
  router.resources('users', '/api/users', jwt, controller.user);


  // 部门管理
  // 获取部门树
  router.get('/api/departments/tree', jwt, controller.department.tree);
  // 修改部门状态
  router.post('/api/departments/status', jwt, controller.department.updateStatus);
  // 部门资源路由 (包含创建、查询列表、查询单个、更新、删除)
  router.resources('departments', '/api/departments', jwt, controller.department);

  // 角色管理
  // 修改角色状态
  router.post('/api/roles/status', jwt, controller.role.updateStatus);
  // 分配角色
  router.post('/api/roles/assign', jwt, controller.role.assignRoles);
  // 获取用户角色
  router.get('/api/roles/userRoles', jwt, controller.role.getUserRoles);
  // 批量删除角色
  router.post('/api/roles/batch', jwt, controller.role.batchDestroy);
  // 获取所有角色（不分页）
  router.get('/api/roles/all', jwt, controller.role.getAllRoles);
  // 角色资源路由
  router.resources('roles', '/api/roles', jwt, controller.role);

  // 菜单管理
  // 获取菜单树
  router.get('/api/menus/tree', jwt, controller.menu.tree);
  // 修改菜单状态
  router.post('/api/menus/status', jwt, controller.menu.updateStatus);
  // 根据角色编码获取菜单列表
  router.get('/api/menus/role/:roleCode', jwt, controller.menu.getMenusByRoleCode);
  // 根据角色编码获取菜单树形结构
  router.get('/api/menus/tree/role/:roleCode', jwt, controller.menu.getMenuTreeByRoleCode);
  // 为角色分配菜单
  router.post('/api/menus/assign', jwt, controller.menu.assignMenusToRole);
  // 获取用户菜单列表
  router.get('/api/menus/user/:userId', jwt, controller.menu.getUserMenus);
  // 获取用户菜单树形结构
  router.get('/api/menus/tree/user/:userId', jwt, controller.menu.getUserMenuTree);
  // 菜单资源路由
  router.resources('menus', '/api/menus', jwt, controller.menu);

  // 系统配置

  // 根据键名获取系统配置
  router.get('/api/systemConfigs/key', jwt, controller.systemConfig.getByKey);
  // 修改系统配置状态
  router.post('/api/systemConfigs/status', jwt, controller.systemConfig.updateStatus);
  // 批量获取系统配置
  router.post('/api/systemConfigs/keys', jwt, controller.systemConfig.getConfigsByKeys);
  // 系统配置资源路由
  router.resources('systemConfigs', '/api/systemConfigs', jwt, controller.systemConfig);

  // 字典类型

  // 根据编码获取字典类型
  router.get('/api/dictTypes/code', jwt, controller.dictType.getByCode);
  // 修改字典类型状态
  router.post('/api/dictTypes/update/status', jwt, controller.dictType.updateStatus);
  // 获取所有启用的字典类型
  router.get('/api/dictTypes/enabled', jwt, controller.dictType.getAllEnabled);
  // 字典类型资源路由
  router.resources('dictTypes', '/api/dictTypes', jwt, controller.dictType);

  // 字典项

  // 根据字典类型编码获取字典项
  router.get('/api/dictItems/dictType', jwt, controller.dictItem.getByDictTypeCode);
  // 修改字典项状态
  router.post('/api/dictItems/status', jwt, controller.dictItem.updateStatus);
  // 批量创建或更新字典项
  router.post('/api/dictItems/batch', jwt, controller.dictItem.batchCreateOrUpdate);
  // 字典项资源路由
  router.resources('dictItems', '/api/dictItems', jwt, controller.dictItem);

  // 图片上传管理
  // 上传图片  批量上传图片
  router.post('/api/upload/image', jwt, controller.uploadController.uploadImages);
  // 删除图片
  router.delete('/api/upload/image', jwt, controller.uploadController.deleteImage);
  // 获取图片列表
  router.get('/api/upload/image/list', jwt, controller.uploadController.getImageList);
  // 获取图片信息
  router.get('/api/upload/image/:id', jwt, controller.uploadController.getImageInfo);
  // 批量删除图片
  router.post('/api/upload/image/batch', jwt, controller.uploadController.batchDeleteImages);
  // 批量修改图片信息
  router.put('/api/upload/image/batch', jwt, controller.uploadController.batchUpdateImageInfo);
  // 修改图片信息
  router.put('/api/upload/image/:id', jwt, controller.uploadController.updateImageInfo);
};
